記得上課的時候,
總覺得"子查詢"是個酷東西,
怎麼想得到工作後,前輩卻告訴我「非必要別用」,
為什麼要我放棄這個酷東西(吶喊~)。
讓我們一起重新認識這個神祕的酷東西吧!
從"AdventureWorks範例資料庫"裡我們可以試試用子查詢來練習,
題目是:
[Production].[Product] 中有被訂購的商品。
(「被訂購」即表示有訂單資料,
因此我們可以從[Sales].[SalesOrderDetail]進行判別是否有訂購紀錄)。
範圍:有被訂購的商品->訂單明細(至少有訂單編號)
--有被訂購的商品ID
SELECT ProductID
FROM [Sales].[SalesOrderDetail] D
觀察一下,發現有重複的,
(編號707未免太熱銷!)
再整理成:
(不整理也沒關係,其實不影響)
SELECT ProductID
FROM [Sales].[SalesOrderDetail] D
GROUP BY ProductID--重複的不列出
結果會變成:
選出[Production].[Product]產品列表
又
在上列範圍的產品ID、品名
SELECT *
FROM [Production].[Product]
WHERE ProductID --帶入子查詢範圍
IN (SELECT ProductID FROM [Sales].[SalesOrderDetail] D GROUP BY ProductID)
小發現:原來編號707是安全帽。
是不是~
不覺得子查詢是個討人喜歡的酷東西嗎?
但是為什麼被說「非必要別用」呢?
莫非,
有比這酷東西更好用的工具?
明天我們一起來揭曉看看吧!